#include"pwdcheck.h"
//编译要加 -lcrypt
//需要root权限
void get_salt(char *salt,char*pwdp){
    int i;
    int j;//记录$出现的次数
    for(i=0,j=0;pwdp[i]&&j!=3;i++){
        if('$'==pwdp[i]){
            j++;
        }
    }
    strncpy(salt,pwdp,i-1);
}

//根据返回值进行下一步操作
int pwscheck(char* username,char*pwd){
    struct spwd * sp;
    char salt[512]={0};
    sp=getspnam(username);

    if(NULL==sp){
        printf("User Not Exist\n");
        return -1;
    }
    //获取盐值，$id$salt
    get_salt(salt,sp->sp_pwdp);
    //crypt对输入密码与盐值进行加密，使用加密后的字符与/etc/shadow中的密文进行对比
    if(0==strcmp(sp->sp_pwdp,crypt(pwd,salt))){
        printf("Password correct\n");
        return 0;
    }
    else{
        printf("Password wrong!\n");
        return -1;
    }
}

/*test
int main(int argc,char *argv[]){
    pwscheck(argv[1],argv[2]);
    return 0;

}
*/
